Joystick HAT
https://gyazo.com/e95817145488cf93c3d6bc6646cd64dd https://m5stack.com/products/m5stickc-joystick-hat
I2C(アドレス 0x38,レジスタ2)で通信
Low-speed mode
10Kbit/s
Standard mode
100Kbit/s
Fast mode
400kbit/s
High-speed mode
3.4Mbit/s
0にしても構わない
saitotetsuya.iconどうなるの?
SDA: 0
SDA(Serial DAta)
Data Line
データ入出力
SCL: 26
SCL(Serial CLock)
Clock Line
クロック
プログラム
Wire.requestFrom()で返ってくる3バイト
x軸の値
-128〜127
右に倒すとマイナス,左に倒すとプラス
saitotetsuya.icon直感的じゃない
y軸の値
-128〜127
上に倒すとプラス,下に倒すとマイナス
スティックに触っていないときは$ (x, y) = (0, 0)
スティックが押されているか
押されていれば0
押されていなければ1
M5.Lcd.setRotation()と取れる値との関係は?
画面の向きとは関係ない
code:sample.ino
#include <M5StickC.h> // Wire.hをincludeしてるのでここでincludeする必要はない #define FREQUENCY 100000 // 100Kbit/s(Standard mode) struct JoystickData {
int8_t x;
int8_t y;
boolean pressed;
} data;
void readData() {
Wire.beginTransmission(JOYSTICK_ADDRESS);
Wire.write(JOYSTICK_REGISTER);
Wire.endTransmission();
Wire.requestFrom(JOYSTICK_ADDRESS, 3);
if (Wire.available() == 3) {
data.x = Wire.read();
data.y = Wire.read();
data.pressed = Wire.read() == 0;
}
}
void setup() {
M5.begin();
M5.Lcd.setRotation(0);
M5.Lcd.fillRect(0, 0, 80, 160, BLACK);
Wire.begin(SDA, SCL, FREQUENCY);
}
void loop() {
readData();
M5.Lcd.setCursor(0, 0);
M5.Lcd.printf("X: %4d\n", data.x);
M5.Lcd.printf("Y: %4d\n", data.y);
M5.Lcd.printf("B: %s\n", data.pressed ? "true" : "false");
}
JoystickC printing
回路図
https://cdn.shopify.com/s/files/1/0056/7689/2250/files/20190912200638_480x480.jpg
ピン配置
table:ピン
M5StickC GIO0 GIO26 3.3V GND
Joystick HAT SDA SCL 3.3V GND